//
//  SSLDBModel.h
//  HD_SSL_FMDB
//
//  Created by 恒达的mini on 2017/5/24.
//  Copyright © 2017年 孙世龙. All rights reserved.
//

#import <Foundation/Foundation.h>
/** SQLite五种数据类型 */
#define SQLTEXT     @"TEXT"
#define SQLINTEGER  @"INTEGER"
#define SQLREAL     @"REAL"
#define SQLBLOB     @"BLOB"
#define SQLNULL     @"NULL"
#define PrimaryKey  @"primary key"

#define primaryId   @"pk"

@interface SSLDBModel : NSObject

@property (nonatomic, assign)           int                    pk;//主键id
@property (retain, readonly, nonatomic) NSMutableArray         *columeNames;//模型所有属性名字
@property (retain, readonly, nonatomic) NSMutableArray         *columeTypes;//模型所有属性类型

#pragma mark---------建表
/*建表，如果已经存在，返回YES*/
+ (BOOL)createTable;

#pragma mark---------增删改查
#pragma mark---保存
/*保存单个数据 */
- (BOOL)saveObject;
/*保存一组数据 */
+ (BOOL)saveObjects:(NSArray *)array;
/*无主键，保存，有主键，更新*/
- (BOOL)saveOrUpdate;
/*根据属性插叙存在，则更新，没有记录，则保存*/
- (BOOL)saveOrUpdateByColumnName:(NSString*)columnName AndColumnValue:(NSString*)columnValue;

#pragma mark---删除
/*删除单个数据 */
- (BOOL)deleteObject;
/*删除一组数据 */
+ (BOOL)deleteObjects:(NSArray *)array;
/*通过条件删除数据 */
+ (BOOL)deleteObjectsByCriteria:(NSString *)criteria;
/*通过条件删除 (多参数），自己编辑where语句*/
+ (BOOL)deleteObjectsWithFormat:(NSString *)format, ...;
/*清空表*/
+ (BOOL)clearTable;

#pragma mark---更新
/*更新单个数据 */
- (BOOL)updateObject;
/*更新一组数据*/
+ (BOOL)updateObjects:(NSArray *)array;


#pragma mark---查询
/*查询全部数据*/
+ (NSArray *)findAllModel;
/*通过主键查询 */
+ (instancetype)findByPK:(int)inPk;
/*查询第一条数据，通过格式 */
+ (instancetype)findFirstWithFormat:(NSString *)format, ...;
/*查询第一条数据，通过条件*/
+ (instancetype)findFirstByCriteria:(NSString *)criteria;
/*通过一定格式规则查询一批数据 */
+ (NSArray *)findWithFormat:(NSString *)format, ...;
/*通过条件查找数据,可以进行分页查询 例如@" WHERE pk > 50 limit 100"*/
+ (NSArray *)findByCriteria:(NSString *)criteria;

#pragma mark---------公共方法
/*子类中的保留字段，不需要创建数据库字段，下面的方法必须在子类中重写*/
+ (NSArray *)transients;
/*判断数据库中是否存在这个表 */
+ (BOOL)isExistInTable;
/*获取表中的所有字段*/
+ (NSArray *)getModelColumns;
/*获取所有属性*/
+ (NSDictionary *)getModelAllPropertys;
/*获取所有属性，包括主键 */
+ (NSDictionary *)getModelAllPropertiesIncludePK;


@end
